package com.bed.lovewithpatientbed.service;

import com.bed.lovewithpatientbed.common.bean.LayUiPageBean;
import com.bed.lovewithpatientbed.common.params.OrderSearchParams;
import com.bed.lovewithpatientbed.pojo.Dept;
import com.bed.lovewithpatientbed.pojo.Hospital;
import com.bed.lovewithpatientbed.pojo.Order;
import com.bed.lovewithpatientbed.pojo.OrderType;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.List;

/**
 * @author xuxiaoding
 * @version 1.0.0
 * @ClassName IOrderService.java
 * @Description 订单Service接口
 */
public interface IOrderService {

    /**
     * @title createOrder
     * @description 增加订单
     * @author xuxiaoding
     * @param order
     * @return 返回结果
     */
    boolean createOrder(Order order);

    /**
     * @title retrieveOrderByUserId
     * @description 根据 userId 查询 order 表
     * @author xuxiaoding
     * @param userId 用户id
     * @return
     */
    List<Order> retrieveOrderByUserId(Integer userId);

    /**
     * @title getOrderCountByUserId
     * @description 查询用户订单总数
     * @author xuxiaoding
     * @param userId 用户id
     * @return 返回总数
     */
    long getOrderCountByUserId(Integer userId);

    /**
     * @title retrieveOrderTotalPayByUserId
     * @description 根据 userId 计算该用户所有订单总金额
     * @author xuxiaoding
     * @param userId 用户id
     * @return 订单总金额
     */
    BigDecimal getOrderTotalPayByUserId(Integer userId);
    /**
     * @description 根据医院id和时间查询租用数量
     * @author tyl
     * @updateTime 2020/10/15 14:23
     * @params dateStart:开始日期，dateEnd:结束日期，hospitalId:医院ID
     */
    List<Order> selecOrderNumByHospitalId(String start,String end,Integer hospitalId) throws ParseException;

    /**
     * @title retrieveOrderByConditionWithLimit
     * @description 根据条件检索分页查询
     * @author xuxiaoding
     * @param pageBean 分页条件
     * @param orderSearchParams 查询条件
     * @return 查询结果
     */
    List<Order> retrieveOrderByConditionWithLimit(LayUiPageBean pageBean, OrderSearchParams orderSearchParams);

    /**
     * @title retrieveAllHospital
     * @description 获取所有医院信息
     * @author xuxiaoding
     * @return 返回Hospital所有信息
     */
    List<Hospital> retrieveAllHospital();

    /**
     * @title getCountByCondition
     * @description 根据条件查询总数
     * @author xuxiaoding
     * @param orderSearchParams 查询条件
     * @return 返回总数
     */
    long getCountByCondition(OrderSearchParams orderSearchParams);

    /**
     * @title retrieveDeptListByHospitalId
     * @description 根据 hospitalId 检索 Dept
     * @author xuxiaoding
     * @param hospitalId 医院Id
     * @return 返回该医院科室列表
     */
    List<Dept> retrieveDeptListByHospitalId(Integer hospitalId);

    /**
     * @title retrieveAllOrderType
     * @description 检索所有 OrderType
     * @author xuxiaoding
     * @return 返回查询结果
     */
    List<OrderType> retrieveAllOrderType();
}
